home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
asmutil
/
bluebook.zip
/
STDIO.ASM
< prev
next >
Wrap
Assembly Source File
|
1986-05-08
|
7KB
|
214 lines
COMMENT ~
STDIO.ASM -- I/O PROCEDURES
From `BLUEBOOK of ASSEMBLY ROUTINES for the IBM PC & XT'
by Christopher L. Morgan
Copyright (C) 1984 by The Waite Group, Inc.
Function: These routines perform fundamental input/output functions for the
keyboard, screen, and communication lines. The standard I/O routines
can be redirected. The communications routines alleviate some of the
problems encountered in DOS and BIOS serial communications handling.
See STDIO.DOC for complete information on the routines.
_____________________________________________________________________________
Contains:
---------
COM_INCK -- Communications line check
COM_INIT -- Initialize communications line
COM_OFF -- Communications line off
COM_ON -- Communications line on
COM_OUT -- Communications line output
STD_CRLF -- Standard output with carriage return & linefeed
STD_IN -- Standard input with echo
STD_INCK -- Standard input check
STD_INNE -- Standard input with no echo
STD_MSGOUT -- Standard output of a message
STD_OUT -- Standard output
STD_OUTDR -- Direct standard output
STD_SPACE -- Standard output of a space
_____________________________________________________________________________
~
CODES SEGMENT
PUBLIC STD_IN,STD_INNE,STD_INCK,STD_OUT,STD_OUTDR,STD_CRLF,STD_SPACE
PUBLIC STD_MSGOUT,COM_INIT,COM_INCK,COM_OUT,COM_ON,COM_OFF
ASSUME CS:CODES
;____________________________ I/O ROUTINES ___________________________________
;Routine for standard input with echo
;
STD_IN PROC FAR
MOV AH,1 ;Standard input
INT 21H ; DOS call
RET ;Return
STD_IN ENDP
;------------------------------------------------------------------------------
;Routine for standard input with NO echo
;
STD_INNE PROC FAR
MOV AH,8 ;Standard input without echo
INT 21H ; DOS call
RET ;Return
STD_INNE ENDP
;------------------------------------------------------------------------------
;Routine for standard input check
STD_INCK PROC FAR
PUSH DX ;Save register
MOV DL,0FFH ;Direct console input
MOV AH,06H ;Check std direct input status
INT 21H ; DOS call
POP DX ;Restore register
RET ;Return
STD_INCK ENDP
;------------------------------------------------------------------------------
;Routine for standard output
;
STD_OUT PROC FAR
PUSH DX ;Save register
MOV DL,AL ;In DL for DOS call
MOV AH,2 ;Standard output
INT 21H ; DOS call
POP DX ;Restore register
RET ;Return
STD_OUT ENDP
;------------------------------------------------------------------------------
;Routine for direct standard output
;
STD_OUTDR PROC FAR
PUSH DX ;Save register
CMP AL,0FFH ;Check for the 1 case of input
JE STD_OUTDRXIT ;If so, go
MOV DL,AL ;Else in DL for DOS call
MOV AH,6 ;Direct console output
INT 21H ; DOS call
STD_OUTDRXIT:
POP DX ;Restore register
RET ;Return
STD_OUTDR ENDP
;------------------------------------------------------------------------------
;Routine to send a CRLF sequence to standard output
;
STD_CRLF PROC FAR
PUSH AX ;Save register
MOV AL,13 ;ASCII carriage return
CALL STD_OUT ;Send it out
MOV AL,10 ;ASCII line feed
CALL STD_OUT ;Send it out
POP AX ;Restore register
RET ;Return
STD_CRLF ENDP
;------------------------------------------------------------------------------
;Routine to send a space to standard output
;
STD_SPACE PROC FAR
PUSH AX ;Save register
MOV AL,32 ;ASCII space
CALL STD_OUT ;Send it out
POP AX ;Restore register
RET
STD_SPACE ENDP
;------------------------------------------------------------------------------
;Routine to send message to standard output
;
STD_MSGOUT PROC FAR
PUSH SI ;Save registers
PUSH AX
STD_MSGOUT1:
MOV AL,[SI] ;Get byte
INC SI ;Point to next byte
CMP AL,0 ;Done?
JE STD_MSGOUTXIT ;If so, go
CALL STD_OUT ;Else send it out
JMP STD_MSGOUT1 ;Loop for more
STD_MSGOUTXIT:
POP AX ;Restore registers
POP SI
RET ;Return
STD_MSGOUT ENDP
;------------------------------------------------------------------------------
;Routine to initialize a communications line
;
COM_INIT PROC FAR
MOV AH,0 ;Initialize
INT 14H ;RS232 BIOS call
RET ;Return
COM_INIT ENDP
;------------------------------------------------------------------------------
;Routine to check for input from a communications line
;
COM_INCK PROC FAR
PUSH DS ;Save registers
PUSH DX
PUSH SI
MOV SI,DX ;Look up address of com line
ADD SI,SI ;Double to index into table
MOV DX,40H ;Segment of system I/O table
MOV DS,DX ;Set data seg to this table
MOV DX,[SI] ;Now get it
ADD DX,5 ;Line status
IN AL,DX ;Get it
TEST AL,1 ;Receive buffer full?
JZ COM_INCKXIT ;If so, go
MOV DX,[SI] ;Data register
IN AL,DX ;Get it
COM_INCKXIT:
POP SI ;Restore registers
POP DX
POP DS
RET
COM_INCK ENDP
;------------------------------------------------------------------------------
;Routine to send output to a communications line
;
COM_OUT PROC FAR
MOV AH,1 ;Send it out
INT 14H ;RS232 BIOS call
RET ;Return
COM_OUT ENDP
;------------------------------------------------------------------------------
;Routine to turn on input from a communications line
;
COM_ON PROC FAR
PUSH DS ;Save registers
PUSH DX
PUSH SI
MOV SI,DX ;Look up address of com line
ADD SI,SI ;Double to index into table
MOV DX,40H ;Segment of system I/O table
MOV DS,DX ;Set data seg to this table
MOV DX,[SI] ;Now get it
ADD DX,4 ;Modem control register
MOV AL,3 ;Set DTR & RTS
OUT DX,AL ;Send out control byte
POP SI ;Restore registers
POP DX
POP DS
RET
COM_ON ENDP
;------------------------------------------------------------------------------
;Routine to turn off input from a communications line
;
COM_OFF PROC FAR
PUSH DS ;Save registers
PUSH DX
PUSH SI
MOV SI,DX ;Look up address of com line
ADD SI,SI ;Double to index into table
MOV DX,40H ;Segment of system I/O table
MOV DS,DX ;Set data seg to this table
MOV DX,[SI] ;Now get it
ADD DX,4 ;Modem control register
MOV AL,2 ;Clear DTR (line 20)
OUT DX,AL ;Send out control byte
POP SI ;Restore registers
POP DX
POP DS
RET
COM_OFF ENDP
;-----------------------------------------------------------------------------
CODES ENDS
;
END
;_____________________________________________________________________________
;>>>>> Physical EOF STDIO.ASM <<<<